    !(function () {

        var style=document.createElement('style');
        style.id='CSSBlock';
        style.innerHTML='* .CommonCSS-hide{visibility:hidden !important;display:block !important;}';
        document.querySelector('head').appendChild(style);

        /**
         * [getKey 通过键值获取键名]
         * @param  {[All]}    value [键值]
         * @return {[Array]}        [匹配的键名数组]
         */
        Object.prototype.getKey=function(value){
            var res=[];
            for(var k in this){
                if(value==this[k])res.push(k);
            }
            return res;
        }

        /**
         * [getLen 获取对象属性数]
         * @return {[Number]}  [对象属性数]
         */
        Object.prototype.getLen=function(){
            var num=0;
            for(var i in this)num++;
            return num;
        }

        /**
         * [clone 深度克隆对象]
         * @return {[Number]}  [克隆对象]
         */
        Object.prototype.clone=function(){
            return clone(this);
        }



        /**
         * [remove 通过索引值删除数组元素]
         * @return {[Object]}  [删除后的数组]
         */
        Array.prototype.remove= function(index) {
            if(index<this.length){
                this.splice(index, 1);
            }
            return this;
        }

        /**
         * [removeFromvalue 通过键值删除数组元素]
         * @return {[Number]}  [删除后的数组]
         */
        Array.prototype.removeFromvalue= function(index) {
            if(index<this.length){
                this.splice(index, 1);
            }
            return this;
        }

        /**
         * [clone 深度克隆数据]
         * @return {[Array]}  [克隆数组]
         */
        Array.prototype.clone=function(){
            return clone(this);
        }

        /**
         * 兼容IE8不支持forEach
         */
        if(typeof Array.prototype.forEach != 'function') {
            Array.prototype.forEach = function(callback){
                for (var i = 0; i < this.length; i++){
                    callback.apply(this, [this[i], i, this]);
                }
            };
        }


        /**
         * [getMousePos 获取鼠标坐标]
         * @param  {[Event]} event [Event事件对象]
         * @return {[Object]}      [{x:水平坐标，y:垂直坐标}]
         */
        window.getMousePos=function(event){
            var e = event||window.event;
            if(e.changedTouches)e=e.changedTouches[0];
            return{
                x:e.clientX+document.body.scrollLeft + document.documentElement.scrollLeft,
                y:e.clientY+document.body.scrollTop + document.documentElement.scrollTop
            }
        }



        /**
         * [clone 深度复制对象、数组]
         * @param {[Object/Array]} Obj [需要复制的对象、数组]
         * @return {[Object/Array]} [复制的对象、数组]
         */
        function clone(Obj){
            var buf;
            if (Obj instanceof Array) {
                buf = [];  // 创建一个空的数组
                var i = Obj.length;
                while (i--) {
                    buf[i] = clone(Obj[i]);
                }
                return buf;
            } else if (Obj instanceof Object){
                buf = {};  // 创建一个空对象
                for (var k in Obj) {  // 为这个对象添加新的属性
                    buf[k] = clone(Obj[k]);
                }
                return buf;
            }else{
                return Obj;
            }
        }



        /**
         * 获取或设置样式
         * @param name需要获取值的样式名或以键值对形式设置样式的对象
         * @param value 当name为字符串时为需要设置的值，其它情况无效
         * @returns {*}返回样式值或当前元素
         */
        Element.prototype.css=function(name,value){
            var v;
            if(typeof name=='object'){
                for(var i in name)this.style[i]=name[i];
                return this;
            }
            if(value!=undefined){
                this.style[name]=value;
                return this;
            }

            if(window.getComputedStyle) {
                v=window.getComputedStyle(this, null)[name];//非IE
            }else{
                v=this.currentStyle[name];//IE
            }
            if("left,right,width,height,top,bottom".search(name)!=-1){
                return parseFloat(v);
            }
            return v;
        }


        /**
         * 添加class类
         * @param classStr 需要添加的类名
         * @returns {*}返回当前元素
         */
        Element.prototype.addClass=function (classStr) {
            var str=this.className;
            if(classStr && str.indexOf(classStr)==-1){
                this.className+=" "+classStr;
            }
            return this;
        }


        /**
         * 删除class类
         * @param classStr 需要删除的类名
         * @returns {*}返回当前元素
         */
        Element.prototype.removeClass=function (classStr) {
            if(classStr){
                this.className=this.className.replace(classStr,'').replace(/(^\s*)|(\s*$)/g, "");
            }
            return this;
        }


        /**
         * 获取元素相对页面左上角的位置
         * @returns {top: number, bottom: Number, left: number, right: Number, width: (Number|number), height: (Number|number)}
         */
        Element.prototype.offset=function(){
            var  xy = this.getBoundingClientRect();
            var arr={
                top:xy.top-document.documentElement.clientTop+document.documentElement.scrollTop,//document.documentElement.clientTop 在IE67中始终为2，其他浏览器为0
                bottom:xy.bottom,
                left:xy.left-document.documentElement.clientLeft+document.documentElement.scrollLeft,//document.documentElement.clientLeft 在IE67中始终为2，其他高级点的浏览器为0
                right:xy.right,
                width:xy.width||xy.right - xy.left, //IE67不存在width 使用right - left获得
                height:xy.height||xy.bottom - xy.top
            }
            return arr;
        }


            /**
             * 获取元素宽高
             * @returns {width: (Number), height: (Number)}
             */
        Element.prototype.getSize=function(){
            var arr=[],current=this,res;
            while(current){
                if(current.css('display')=='none'){
                    arr.push([current,current.css('visibility')]);
                    current.className+=' CommonCSS-hide';
                }
                current=current.parentNode;
                if(current.tagName=="BODY"){
                    break;
                }
            }
            res={
                width:parseFloat(this.css('width')),
                height:parseFloat(this.css('height'))
            };
            for(var i=0;i<arr.length;i++){
                arr[i][0].className=arr[i][0].className.replace('CommonCSS-hide','');
            }
            return res;
        }




        /**
         * [drag description]
         * @param  {[type]} obj [需要拖动的html元素对象]
         * @param  {[type]} dragObj [触发拖动的html元素对象]
         * @param  {[type]} area [拖动范围html元素对象]
         */
        var _dragObj=null;
        Element.prototype.drag=function(dragObj,area){
            var selfElement=this;
            if(!area){
                area={
                    width:document.documentElement.clientWidth,
                    height:document.documentElement.clientHeight,
                };
            }else if(area.css('position')=='static'){
                area.css('position','relative');
                area=area.offset();
            }


            if(selfElement._isdragInit==true)return;
            selfElement._isdragInit=true;
            if(!dragObj)dragObj=obj;
            if(obj.css('position')=='static')selfElement.style.position='relative';
            if(!obj.css('left'))selfElement.style.left=0;
            if(!obj.css('top'))selfElement.style.top=0;
            dragObj.bind('mousedown',_down).bind('mouseup',_up);

            function _down(event){
                _dragObj=selfElement;
                selfElement._ismove=true;
                selfElement._offset=getMousePos(event);
                selfElement._leftTop=[obj.css('left'),obj.css('top')];
            }

            function _up(event){
                event.stopPropagation();
                selfElement._ismove=false;
            }

            //禁止拖动
            selfElement.undrag=function(){
                dragObj.bind('mousedown',_down);
                dragObj.bind('mouseup',_up);
                selfElement.undrag=null;
            }

            if(!_dragObj){
                _dragObj=true;
                document.onmousemove=function(event){
                    if(!_dragObj)return;
                    var self=_dragObj;
                    if(self._ismove){
                        var xy=getMousePos(event);
                        var x=self._leftTop[0]+(xy.x-self._offset.x);
                        var y=self._leftTop[1]+(xy.y-self._offset.y);
                        if(!self.isDisabedDragLeft && x>0 && x+self.offset().width<area.width){
                            self.style.left=x+"px";
                        }
                        if(!self.isDisabedDragTop && y>0 && y+self.offset().height<area.height){
                            self.style.top=y+"px";
                        }
                    }
                }

                document.onmouseup=function(event){
                    if(_dragObj && _dragObj!=true)_dragObj._ismove=false;
                }
            }
            //return obj;
        }



        /**
         * IEVersion [ie版本号，大于11时不是ie浏览器]
         */

        window.IEVersion=(function(){
            var version;
            if(navigator.userAgent.indexOf("MSIE")>0){
                var v=navigator.appVersion;
                if(v.indexOf('MSIE 5')>0){
                    version=5;
                }else if(v.indexOf('MSIE 6')>0){
                    version=6;
                }else if(v.indexOf('MSIE 7')>0){
                    version=7;
                }else if(v.indexOf('MSIE 8')>0){
                    version=8;
                }else if(v.indexOf('MSIE 9')>0){
                    version=9;
                }else if(v.indexOf('MSIE 10')>0){
                    version=10;
                }else if(v.indexOf('MSIE 11')>0){
                    version=11;
                }else{
                    version=20;
                }
            }else{
                version=20;
            }
            return version;
        })();



        /**
         * 异步请求
         * options={
    *   url:请求地址
    *   type:请求方式 get(默认)/post
    *   data:传参json格式
    *   header:参数是否编码与form的enctype属性相同
    *   success:成功回调
    *   error:成功回调
    * }
         * */
        window.ajax=function(options){
            if(!options.url)return;
            var xhr=new XMLHttpRequest(),data=options.data;
            var type=options.type?options.type.toUpperCase():"GET";
            options.header=options.header?options.header:"application/x-www-form-urlencoded";

            if(data){
                if (data instanceof Object){
                    var tmp="";
                    for(var k in data) {
                        tmp+=k+"="+data[k]+"&";
                    }
                    data=tmp.substr(0,tmp.length-1);
                }else{
                    throw "data不是json格式";
                    return;
                }
            }
            if(type=="GET")options.url+="?"+data;

            xhr.open(type,options.url);
            xhr.setRequestHeader("Content-Type", options.header);

            xhr.onload=function (res) {
                var data= res.target.response;
                try {data=JSON.parse(data);} catch (e) {}
                if(options.success)options.success(data);
            }

            xhr.onerror=function (res) {
                var data= res.target.response;
                try {data=JSON.parse(data);} catch (e) {}
                if(options.error)options.error(data);
            }
            xhr.send(type=="POST"?data:"");
        }


        /**
        * 格式化url参数为json格式
        * */
        window.urlData=function () {
            var arr=location.search.substr(1,location.search.length).split('&'),res={},tmp;
            for(var i=0;i<arr.length;i++){
                tmp=arr[i].split('=');
                res[tmp[0]]=decodeURI(tmp[1]);
            }
            return res;
        }();


        /**
         * ie版本小于9时提醒升级浏览器
         */
        if(window.IEVersion<9){
            document.body.innerHTML+='<div style="background:#f6f5b4;width: 100%;height:100%;position:fixed;left:0;top:0">\n' +
            '    <div style="width: 500px;height:200px;left:50%;top:50%;position:absolute;margin:-130px 0 0 -250px;text-align:center;">\n' +
            '        <div style="font-size: 13px;color:#4f4f4f;margin:0 0 30px 0;">您的浏览器版本过低，可能导致网站不能正常访问，请使用以下浏览器</div>\n' +
            '        <img src="https://gitee.com/wj4750/other/raw/3bc1f62314850c355aa2c488c74234ce8b5cf191/ie8-.png" alt="">\n' +
            '    </div>\n' +
            '</div>';
        }

    })();